home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 September / Macworld (1998-09).dmg / Shareware World / Info / For Developers / MacZoop 1.8.3 / Required Classes / Z Headers / ZApplication.h < prev    next >
Text File  |  1998-06-11  |  5KB  |  200 lines

  1. /*************************************************************************************************
  2. *
  3. *
  4. *            MacZoop - "the framework for the rest of us"         
  5. *
  6. *
  7. *
  8. *            ZApplication.h            -- the application object
  9. *
  10. *
  11. *
  12. *
  13. *
  14. *            © 1996, Graham Cox
  15. *
  16. *
  17. *
  18. *
  19. *************************************************************************************************/
  20.  
  21.  
  22. #pragma once
  23.  
  24. #ifndef __ZAPPLICATION__
  25. #define    __ZAPPLICATION__
  26.  
  27. #ifndef __ZCOMMANDER__
  28. #include    "ZCommander.h"
  29. #endif
  30.  
  31. class    ZEventHandler;
  32. class    ZWindow;
  33. class    ZUndoTask;
  34. class    ZPrinter;
  35. class    ZMenuBar;
  36.  
  37. // for easier adoption of navigation services, the fileTypes handle now incorporates a
  38. // header such that it mimics an 'open' resource.
  39.  
  40. #if PRAGMA_ALIGN_SUPPORTED
  41. #pragma options align=mac68k
  42. #endif
  43.  
  44. typedef struct
  45. {
  46.     OSType    appSignature;
  47.     short    reserved;
  48.     short    osTypeCount;
  49.     OSType    osType[1];
  50. }
  51. FTypeList, *FTypeListPtr, **FTypeListHdl;
  52.  
  53. #if PRAGMA_ALIGN_SUPPORTED
  54. #pragma options align=reset
  55. #endif
  56.  
  57. // app class info:
  58.  
  59. DEFINECLASSID( ZApplication, 'zapp' );
  60.  
  61. // app class definition:
  62.  
  63. class    ZApplication : public ZCommander
  64. {
  65.     friend class ZEventHandler;
  66.     
  67. protected:
  68.  
  69.     Boolean            done;                // normally FALSE, if set TRUE, will try to quit
  70.     short            phase;                // current phase
  71.     short            appResRefNum;        // refnum of application resource file
  72.     ZEventHandler*    zEH;                // event handler object
  73.     ZWindow*        mostRecent;            // most recently created window
  74.     Handle            shortageFund;        // to deal with tight memory, we can release this
  75.     FTypeListHdl    itsFileTypes;        // list of filetypes we can open
  76.     ZUndoTask*        curUndoTask;        // current undoable task
  77.     ZPrinter*        itsPrinter;            // printer object for handling print commands
  78.     Boolean            memIsShort;            // flag memory problem
  79.     Boolean            userHasSeenAlert;    // TRUE if user has been warned about the memory
  80.  
  81. public:    
  82.  
  83.     ZApplication();
  84.     virtual ~ZApplication();
  85.     
  86.     // initialisation and clean-up
  87.     
  88.     virtual void        InitMacZoop( const short numMasterBlocks = 8 );
  89.     virtual void        StartUp() {};
  90.     virtual void        ShutDown() {};
  91.     virtual void        ReadPrefs() {};
  92.     
  93.     // event processing
  94.     
  95.     virtual void        Run();
  96.     virtual Boolean        Quit();
  97.     virtual void        RequestQuit();
  98.     virtual Boolean        MemoryShortage( const Size bytesShort );
  99.     virtual void        Process1Event();
  100.     virtual void        Process1Event( EventRecord* anExternalEvent );
  101.     virtual void        HandleCommand( const long aCmd );
  102.     virtual void        HandleCommand( const short menuID, const short itemID );
  103.     virtual void        UpdateMenus();
  104.     virtual Boolean        GetCurrentEvent( EventRecord* anEvent );
  105.     virtual void        HandleAppleEvent(    AEEventClass aeClass, AEEventID aeID,
  106.                                             AppleEvent* aeEvt, AppleEvent* reply );
  107.                                             
  108.     virtual void        MouseNotInAnyWindow( const Point globalMouse );
  109.     virtual void        WaitApplicationForeground();
  110.                                             
  111.     // status utilities
  112.     
  113.     virtual    short        GetClicks();
  114.     virtual    Boolean        InBackground();
  115.     virtual void        GetName( Str255 appName );
  116.  
  117.     // error processing
  118.     
  119.     virtual void        HandleError( OSErr theErr );
  120.     
  121.     // window construction
  122.     
  123.     virtual void        OpenNewWindow();
  124.     virtual ZWindow*    OpenNewWindowType( OSType aType = 0 );
  125.     virtual void        CloseAll( Boolean closeFloaters = FALSE );
  126.     virtual ZWindow*    GetFrontWindow();
  127.     virtual void        AboutBox();
  128.     virtual void        DoPreferences() {};
  129.     
  130.     // opening files
  131.     
  132.     virtual Boolean        PickFile( FSSpec* aFile, OSType* fType );
  133.     virtual void        OpenFile( const FSSpec& aFile, const OSType fType, Boolean isStationery = FALSE );
  134.     
  135.     // extending the file types
  136.     
  137.     virtual void        AddFileType( const OSType aType );
  138.     virtual Boolean        CanOpenFileType( const OSType aType );
  139.     
  140.     // undo task handling
  141.     
  142.     virtual void        SetTask( ZUndoTask* aTask );
  143.     virtual void        UpdateUndo();
  144.     inline ZUndoTask*    GetUndoTask() { return curUndoTask; };
  145.     
  146.     // printer handling
  147.     
  148.     virtual void        MakePrinter();
  149.     virtual void        DoPageSetup();
  150.     virtual void        DoPrint();
  151.     inline    ZPrinter*    GetPrinter() { return itsPrinter; };
  152.     
  153.     // other inline accessors
  154.     
  155.     inline    short            GetPhase()                        { return phase;};
  156.     inline    FTypeListHdl    GetFileTypeList()                 { return itsFileTypes; };
  157.     inline    Boolean            MemoryCrisis()                     { return memIsShort; };
  158.     inline    Boolean            UserHasSeenMemoryCrisisAlert()     { return userHasSeenAlert; };
  159.     inline    ZEventHandler*    GetEventHandler()                 { return zEH; };
  160.     inline    short            GetAppRefnum()                     { return appResRefNum; };
  161.     
  162. protected:
  163.  
  164.     void                InitMacApplication( const short numMasterBlocks );
  165.     virtual void        MakeEventHandler();
  166.     virtual void        MakeClipboard();
  167.     virtual Boolean        CheckCanRun();
  168.     virtual void        InitMenuBar();
  169.     virtual void        MakeNewWindow();
  170.     virtual ZWindow*    MakeNewWindowType( OSType aType = 0 ) { MakeNewWindow(); return mostRecent; };
  171.     virtual void        CheckLowMemory();
  172.     virtual void        RegisterClasses();
  173. };
  174.  
  175. // possible values of "phase"
  176.  
  177. enum
  178. {
  179.     kInitialising,
  180.     kRunning,
  181.     kQuitting
  182. };
  183.  
  184. enum
  185. {
  186.     kDefaultWindowType = 0
  187. };
  188.  
  189. #define        kUndoStrIndex                5
  190. #define        kRedoStrIndex                6
  191. #define        kCantUndoStrIndex            7        
  192.  
  193. #define        kCantRunAlertID                131
  194. #define        kFatalStartupErrAlertID        136
  195.  
  196. #define        kAEReopenApplication        'rapp'    // new MacOS 8 apple event
  197.  
  198.  
  199.  
  200. #endif